﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using LogicaNegocios.Manager;
using Dominio;

namespace UIWeb
{
    public partial class MantenimientoUsuario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            UsuarioManager um = UsuarioManager.GetManager();
               if (Session["userLogin"] == null)
            {
                Response.Redirect("~/UserLogin.aspx");
            }
            else
            {
                if (um.esSeguidor((Usuario)Session["userLogin"]) || um.noTieneRol((Usuario)Session["userLogin"]))
                    if (um.esAdmin((Usuario)Session["userLogin"]))
                    {
                        Response.Redirect("~/Default.aspx");
                    }
                    else
                        Response.Redirect("~/Default_seguidores.aspx");
                else
                {


                    if (!IsPostBack)
                    {
                        LoadRoles();
                        cargarDGV();
                    }

                }
            }
        }

        private void LoadRoles()
        {
            UsuarioManager usuarioManager = UsuarioManager.GetManager();
            List<Rol> roles = usuarioManager.getRoles();
            checkRoles.Items.Clear();
            checkRoles.DataSource = roles;
            checkRoles.DataBind();
            AddEventClientChkRols();
        }

        protected void AddEventClientChkRols()
        {
            string jsfunction;
            foreach (ListItem r in checkRoles.Items)
            {
                jsfunction = "selectedRol(" + r.Value + ",this);";
                r.Attributes["onclick"] = string.Format(jsfunction, this);
                //if (hidSelectedRols.Value.Contains("," + r.Value + ",")) { r.Selected = true; }
            }
        }



        protected void SetChkRolsUsers(List<Rol> roles)
        {
            int rid = -1;
            List<Rol> aux = null;

            foreach (ListItem r in checkRoles.Items)
            {
                rid = int.Parse(r.Value);
                aux = roles.Where(ro => ro.Id == rid).ToList();
                if (aux.Count > 0 && roles.Count > 0)
                {
                    hidSelectedRols.Value += "," + r.Value + ",";
                    r.Selected = true;
                }
                else
                {
                    r.Selected = false;
                }
            }
        }

        private void cargarDGV()
        {
            UsuarioManager usuarioManager = UsuarioManager.GetManager();
            List<Usuario> usuarios = usuarioManager.GetUsuarios();
            if (usuarios != null && usuarios.Count > 0)
            {
                DGVUsuarios.DataSource = usuarios;
                DGVUsuarios.DataBind();
            }


        }

        private void setChkClientEvent()
        {

        }

        public void borrarCampos()
        {
            txtNombre.Text = string.Empty;
            txtApellido.Text = string.Empty;
            txtNameUsr.Text = string.Empty;
            txtPass.Text = string.Empty;
            txtPass2.Text = string.Empty;
            txtEmail.Text = string.Empty;
            lblError.Text = string.Empty;
            foreach (ListItem r in checkRoles.Items) { r.Selected = false; };
            hidSelectedRols.Value = string.Empty;
        }

        protected void lnkAlta_Click(object sender, EventArgs e)
        {
            try
            {
                UsuarioManager usuMgr = UsuarioManager.GetManager();
                Usuario usu = new Usuario();
                usu.Nombre = txtNombre.Text;
                usu.Apellido = txtApellido.Text;
                usu.NombreUsuario = txtNameUsr.Text;
                usu.Password = txtPass.Text;
                usu.Email = txtEmail.Text;

                //Roles
                List<Rol> roles = new List<Rol>();
                string s = hidSelectedRols.Value;
                if (!string.IsNullOrEmpty(s))
                {
                    s = s.Replace(",,", "|");
                    s = s.Replace(",", string.Empty);
                    string[] sAux = s.Split('|');

                    foreach (string i in sAux)
                    {
                        roles.Add(usuMgr.getRolByRolID(int.Parse(i)));
                    }
                }
                usu.Roles = roles;
                usuMgr.CrearUsuario(usu);
                cargarDGV();
                borrarCampos();

            }
            catch (Exception ex)
            {
                hidSelectedRols.Value = "";
                lblError.Text = ex.Message;
            }
            AddEventClientChkRols();
        }

        protected void lnkBaja_Click(object sender, EventArgs e)
        {
            try
            {
                if (DGVUsuarios.SelectedRow != null)
                {
                    int indice = DGVUsuarios.SelectedIndex;
                    UsuarioManager usuarioMgr = UsuarioManager.GetManager();
                    Usuario usuario = usuarioMgr.GetUsuario((string)DGVUsuarios.DataKeys[indice].Value);
                    usuarioMgr.EliminarUsuario(usuario);
                    cargarDGV();
                    borrarCampos();
                }
            }
            catch (Exception ex)
            {
                lblError.Text = ex.Message;
            }
        }



        protected void lnkModificar_Click(object sender, EventArgs e)
        {
            try
            {
                lblError.Visible = false;
                if (DGVUsuarios.SelectedRow != null)
                {
                    int indice = DGVUsuarios.SelectedIndex;
                    UsuarioManager usuarioMgr = UsuarioManager.GetManager();
                    Usuario usuario = usuarioMgr.GetUsuario((string)DGVUsuarios.DataKeys[indice].Value);
                    usuario.Nombre = txtNombre.Text;
                    usuario.Apellido = txtApellido.Text;
                    usuario.NombreUsuario = txtNameUsr.Text;
                    usuario.Password = txtPass.Text;
                    usuario.Email = txtEmail.Text;
                    string s = hidSelectedRols.Value;
                    if (!string.IsNullOrEmpty(s))
                    {
                        s = s.Replace(",,", "|");
                        s = s.Replace(",", string.Empty);
                        string[] sAux = s.Split('|');
                        List<Rol> roles = new List<Rol>();
                        foreach (string i in sAux)
                        {
                            roles.Add(usuarioMgr.getRolByRolID(int.Parse(i)));
                        }
                        usuario.Roles = roles;
                    }
                
                    
                    usuarioMgr.ModificarUsuario(usuario);
                    borrarCampos();
                    cargarDGV();
                    
                }
            }
            catch (Exception ex)
            {
                lblError.Text = ex.Message;
                lblError.Visible = true;
                 
            }
        }

        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (DGVUsuarios.SelectedRow != null)
            {
                borrarCampos();
                int indice = DGVUsuarios.SelectedIndex;
                UsuarioManager usuarioMgr = UsuarioManager.GetManager();
                Usuario usuario = usuarioMgr.GetUsuario((string)DGVUsuarios.DataKeys[indice].Value);
                txtNombre.Text = usuario.Nombre;
                txtApellido.Text = usuario.Apellido;
                txtNameUsr.Text = usuario.NombreUsuario;
                txtPass.Text = usuario.Password;
                txtEmail.Text = usuario.Email;
                txtPass.Attributes.Add("value",usuario.Password);
                txtPass2.Attributes.Add("value", usuario.Password);
                List<Rol> roles = usuarioMgr.getRolesByUserID(usuario.Id);
                AddEventClientChkRols();
                SetChkRolsUsers(roles);

            }
        }

        protected void DGVUsuarios_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            DGVUsuarios.PageIndex = e.NewPageIndex;
            DGVUsuarios.DataBind();
        }
    }
}